package com.silence.gmall.product.domain.repository.impl;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.repository.CrudRepository;
import com.silence.gmall.base.TableDataInfo;
import com.silence.gmall.product.assembler.BaseTrademarkFactory;
import com.silence.gmall.product.domain.entity.BaseTrademark;
import com.silence.gmall.product.domain.mapper.BaseTrademarkMapper;
import com.silence.gmall.product.domain.repository.BaseTrademarkRepository;
import com.silence.gmall.product.dto.BaseTrademarkDto;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @Author silence
 * @Description 针对表【base_trademark(品牌表)】的数据库操作Repository实现
 * @Date 2025-08-17 16:28:16
 */
@Slf4j
@Repository
@RequiredArgsConstructor
public class BaseTrademarkRepositoryImpl extends CrudRepository<BaseTrademarkMapper, BaseTrademark>
    implements BaseTrademarkRepository {

    /**
     * 品牌工厂
     */
    private final BaseTrademarkFactory baseTrademarkFactory;

    /**
     * 获取品牌分页列表
     *
     * @param page  页码
     * @param limit 页数
     * @return 品牌分页列表
     */
    @Override
    public TableDataInfo<BaseTrademarkDto> pageBaseTrademark(Long page, Long limit) {
        // 转换查询结果
        return baseTrademarkFactory.pageTrademark2TableTrademarkDto(page(new Page<>(page, limit)));
    }

    /**
     * 根据Id获取品牌
     *
     * @param id 品牌ID
     * @return 品牌
     */
    @Override
    public BaseTrademarkDto getBaseTrademark(Long id) {
        return baseTrademarkFactory.trademark2TrademarkDto(getById(id));
    }

    /**
     * 获取品牌属性
     *
     * @return 品牌集合
     */
    @Override
    public List<BaseTrademarkDto> getTrademarkList() {
        return baseTrademarkFactory.trademarkList2TrademarkDtoList(list());
    }

    /**
     * 添加品牌
     *
     * @param reqVo 品牌请求VO
     */
    @Override
    public void saveBaseTrademark(BaseTrademarkDto reqVo) {
        save(baseTrademarkFactory.trademarkDto2Trademark(reqVo));
    }

    /**
     * 修改品牌
     *
     * @param reqVo 品牌请求VO
     */
    @Override
    public void updateBaseTrademark(BaseTrademarkDto reqVo) {
        updateById(baseTrademarkFactory.trademarkDto2Trademark(reqVo));
    }

    /**
     * 删除品牌
     *
     * @param id 品牌ID
     */
    @Override
    public void removeBaseTrademark(Long id) {
        removeById(id);
    }

}